using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using AccesoDatos;
using Entidades;

namespace Negocio.Negocio
{
    // Clase Negocio
    public class Paquete
    {
        #region Metodos publicos

        // Devuelve la lista de servicios
        public DataTable ListaPaquetes(String PaqueteID, String Descripcion,
            String CodigoTipoEvento, String Estado)
        {
            try
            {
                SqlHelper oSql = new SqlHelper();
                RutinasGenericas oRutGen = new RutinasGenericas();

                // Seteo de valores para el criterio
                int iCriterio;
                if (PaqueteID == "" && Descripcion == "" && Estado == "" && CodigoTipoEvento == "")
                {
                    iCriterio = 0; // Valor por defecto para buscar a todos
                }
                else iCriterio = 1;

                String iPaqueteID = PaqueteID == "" ? "0" : PaqueteID;
                String iEstado = Estado == "" ? "0" : Estado;
                String iCodigoTipoEvento = CodigoTipoEvento == "" ? "0" : CodigoTipoEvento;

                Object[,] parmSP = { 
                    {"@iCriterio", SqlDbType.Int, 4, iCriterio},
                    {"@iPaqueteID", SqlDbType.Int, 4, Convert.ToInt32(iPaqueteID)},
                    {"@tDescripcion", SqlDbType.VarChar, 20, Descripcion},                  
                    {"@iCodigoTipoEvento", SqlDbType.Int, 4, Convert.ToInt32(iCodigoTipoEvento)},
                    {"@oEstado", SqlDbType.Int, 4, Convert.ToInt32(iEstado)},
                    
                                        
                };

                return oSql.ExecSPReturnDataTable(oRutGen.CadenaConexion(), "UP_VTA_SEL_Paquete", parmSP);
            }
            catch (Exception ex)
            {
                throw new Exception("ListaPaquete() - Negocio " + ex.Message);
            }
        }


        // Inserta un Paquete
        public int InsertaPaquete(Entidades.Paquete paquete)
        {
            try
            {
                SqlHelper oSql = new SqlHelper();
                RutinasGenericas oRutGen = new RutinasGenericas();

                Object[,] parmSP = { 
                    {"@tDescripcion", SqlDbType.VarChar, 30, paquete.Descripcion},                    
                    {"@oEstado", SqlDbType.Int, 4, paquete.Estado},
                    {"@iCodigoTipoEvento", SqlDbType.Int, 4, paquete.CodigoTipoDeEvento},
                    {"@iCodigoTipoConfiguracion", SqlDbType.Int, 4, paquete.CodigoTipoConfiguracion},
                    {"@rMontoPaqueteConIGV", SqlDbType.Decimal, 15, paquete.MontoPaqueteConIGV},
                    {"@rMontoPaqueteSinIGV", SqlDbType.Decimal, 15, paquete.MontoPaqueteSinIGV}
                    
                };

                return (int)oSql.ExecSPReturnEscalar(oRutGen.CadenaConexion(), "UP_VTA_INS_Paquete", parmSP);
            }
            catch (Exception ex)
            {
                throw new Exception("InsertaPaquete() - " + ex.Message);
            }
        }

        // Edita un Paquete
        public int EditaPaquete(Entidades.Paquete paquete)
        {
            try
            {
                SqlHelper oSql = new SqlHelper();
                RutinasGenericas oRutGen = new RutinasGenericas();

                Object[,] parmSP = { 
                    {"@iPaqueteID", SqlDbType.VarChar, 30, paquete.CodigoPaquete},                                        
                    {"@tDescripcion", SqlDbType.VarChar, 30, paquete.Descripcion},                    
                    {"@oEstado", SqlDbType.Int, 4, paquete.Estado},
                    {"@iCodigoTipoEvento", SqlDbType.Int, 4, paquete.CodigoTipoDeEvento},
                    {"@dFechaActivacion", SqlDbType.Char, 8, paquete.FechaActivacion},
                    {"@dFechaInactivacion", SqlDbType.Char, 8, paquete.FechaInactivacion},
                    {"@iCodigoTipoConfiguracion", SqlDbType.Int, 4, paquete.CodigoTipoConfiguracion},
                    {"@rMontoPaqueteConIGV", SqlDbType.Decimal, 15, paquete.MontoPaqueteConIGV},
                    {"@rMontoPaqueteSinIGV", SqlDbType.Decimal, 15, paquete.MontoPaqueteSinIGV}
                };

                return (int)oSql.ExecSPReturnEscalar(oRutGen.CadenaConexion(), "UP_VTA_UPD_Paquete", parmSP);
            }
            catch (Exception ex)
            {
                throw new Exception("ActualizaPaquete() - " + ex.Message);
            }
        }

        // Elimina un Paquete
        public int EliminaPaquete(Entidades.Paquete paquete)
        {
            try
            {
                SqlHelper oSql = new SqlHelper();
                RutinasGenericas oRutGen = new RutinasGenericas();

                Object[,] parmSP = { 
                    {"@iPaqueteID", SqlDbType.Int, 4, paquete.CodigoPaquete}
                };

                return (int)oSql.ExecSPReturnEscalar(oRutGen.CadenaConexion(), "UP_VTA_DEL_Paquete", parmSP);
            }
            catch (Exception ex)
            {
                throw new Exception("EliminaPaquete() - " + ex.Message);
            }
        }

        public DataTable ListaEstado()
        {

            try
            {
                SqlHelper oSql = new SqlHelper();
                RutinasGenericas oRutGen = new RutinasGenericas();

                return oSql.ExecSPReturnDataTable(oRutGen.CadenaConexion(), "UP_VTA_SEL_Estado");
            }
            catch (Exception ex)
            {
                throw new Exception("ListaEstado() - " + ex.Message);
            }
        }

        public DataTable ListaTipoEvento()
        {

            try
            {
                SqlHelper oSql = new SqlHelper();
                RutinasGenericas oRutGen = new RutinasGenericas();

                return oSql.ExecSPReturnDataTable(oRutGen.CadenaConexion(), "UP_VTA_SEL_TipoEventoCombo");
            }
            catch (Exception ex)
            {
                throw new Exception("ListaTipoEvento() - " + ex.Message);
            }
        }

        #endregion
    }
}
